package thread.cusproc;
/**
 * 仓库类，在这里面实现生产和消费。同步互斥。
 * @author sunniwell
 *
 */
public class WareHouse {
	/**
	 * 最大仓储量
	 */
	private static final int MAX_COUNT = 100;
	
	private int currentCount;
	
	public WareHouse(int currentCount){
		this.currentCount = currentCount;
	}
	
	/**
	 * 生产
	 * @param needNum 需要生产的数量
	 */
	public synchronized void produce(int needNum){
		while(currentCount+needNum > MAX_COUNT){
			System.out.println("要生产的数量（"+needNum+"）超过了当前仓库可产量（"+(MAX_COUNT-currentCount)+"），暂停生产。");
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		//简单地更改库存量，表示生产业务。
		currentCount += needNum;
		System.out.println("生产了"+needNum+"个产品，当前库存量为"+currentCount);
		notifyAll();
	}
	
	/**
	 * 消费
	 * @param needNum 需要消费的数量
	 */
	public synchronized void consume(int needNum){
		while(currentCount < needNum){
			System.out.println("要消费的数量（"+needNum+"）超过了当前仓库量（"+(currentCount)+"），暂停消费。");
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		//简单地更改库存量，表示消费业务。
		currentCount -= needNum;
		System.out.println("消费了"+needNum+"个产品，当前库存量为"+currentCount);
		notifyAll();
	}
	
}
